<?php
namespace app\api\service;

use app\api\service\pay\PlatformFactory;
use think\exception\ValidateException;
use think\facade\Log;

class PayService
{
    protected $platform;

    public function __construct($platformName = null)
    {
        $platformName = $platformName ?? config('pay.default_platform');
        $this->platform = PlatformFactory::create($platformName);
    }



    // ------------------------------------------sdk接口------------------------------------------


    public function merchant_update($params)
    {
        // 验证数据
        // 调用平台接口
        $result = $this->platform->merchant_update($params);

        return $result;
    }
    public function merchant_info($params)
    {
        // 验证数据
        // 调用平台接口
        $result = $this->platform->merchant_info($params);

        return $result;
    }

    public function addTerm($params)
    {
        // 验证数据
        // 调用平台接口
        $result = $this->platform->addTerm($params);

        return $result;
    }


    public function subMerchantQuery($params)
    {
        // 验证数据
        // 调用平台接口
        $result = $this->platform->subMerchantQuery($params);

        return $result;
    }

    public function microTermList($params)
    {
        // 验证数据
        // 调用平台接口
        $result = $this->platform->microTermList($params);

        return $result;
    }

    public function ec_apply($params)
    {
        // 验证数据
        // 调用平台接口
        $result = $this->platform->ec_apply($params);

        return $result;
    }
    public function ec_query($params)
    {
        // 验证数据
        // 调用平台接口
        $result = $this->platform->ec_query($params);

        return $result;
    }

    // 聚合支付：支付预下单，获取订单号，支付结果回调通知
    public function createPayOrder($params)
    {
        // 验证数据
        // 调用平台接口
        $result = $this->platform->createPayOrder($params);

        return $result;
    }

    // 聚合支付：查询订单
    public function queryPayOrder($params)
    {
        // 验证数据
        // 调用平台接口
        $result = $this->platform->queryPayOrder($params);

        return $result;
    }

    // 聚合支付：取消订单
    public function cancelPayOrder($params)
    {
        // 验证数据
        // 调用平台接口
        $result = $this->platform->cancelPayOrder($params);

        return $result;
    }

    // 收银台支付：收银台支付下单
    public function cashierPayOrder($params)
    {
        // 验证数据
        // 调用平台接口
        $result = $this->platform->cashierPayOrder($params);

        return $result;
    }

    // 收银台支付：收银台关单
    public function cashierClosePayOrder($params)
    {
        // 验证数据
        // 调用平台接口
        $result = $this->platform->cashierClosePayOrder($params);

        return $result;
    }

    // 收银台支付：收银台查询
    public function cashierQueryPayOrder($params)
    {
        // 验证数据
        // 调用平台接口
        $result = $this->platform->cashierQueryPayOrder($params);

        return $result;
    }

    // 收银台支付：收银台取消
    public function cashierCancelPayOrder($params)
    {
        // 验证数据
        // 调用平台接口
        $result = $this->platform->cashierCancelPayOrder($params);

        return $result;
    }

    // 收银台支付：收银台取消查询
    public function cashierCancelPayOrderQuery($params)
    {
        // 验证数据
        // 调用平台接口
        $result = $this->platform->cashierCancelPayOrderQuery($params);

        return $result;
    }

    // 卡BIN查询--sdk
    public function cardBin($params)
    {
        // 验证数据

        // 调用平台接口
        $result = $this->platform->cardBin($params);

        return $result;
    }

    // 附件上传--sdk
    public function uploadFile($params)
    {
        // 验证数据

        // 调用平台接口
        $result = $this->platform->fileDo($params);

        return $result;
    }

    // ----------------------------------------------token接口-------------------------------------

    
    // 进件
    public function merchant($params)
    {
        // 验证数据
        // 调用平台接口
        $result = $this->platform->merchant($params);

        return $result;
    }

    // 获取地区信息
    public function areaInfo($params)
    {
        // 验证数据

        // 调用平台接口
        $result = $this->platform->areaInfo($params);

        return $result;
    }

    // 获取银行地区信息
    public function bankAreaInfo($params)
    {
        // 验证数据

        // 调用平台接口
        $result = $this->platform->bankAreaInfo($params);

        return $result;
    }

    // 获取银行列表信息
    public function bankInfo($params)
    {
        // 验证数据

        // 调用平台接口
        $result = $this->platform->bankInfo($params);

        return $result;
    }

    // 商户类别查询
    public function shopType($params)
    {
        // 验证数据

        // 调用平台接口
        $result = $this->platform->shopType($params);

        return $result;
    }

    // 文件上传下载--token
    public function fileDo($params)
    {
        // 验证数据

        // 调用平台接口
        $result = $this->platform->fileDo($params);

        return $result;
    }



    // ------------------------------------------回调相关-----------------------------------------

    
    // 门店回调
    public function shopStatusNotify($params)
    {
        // 验证数据
        // 调用平台接口
        $result = $this->platform->shopStatusNotify($params);

        return $result;
    }
    
    // 订单回调
    public function orderStatusNotify($params)
    {
        // 验证数据
        // 调用平台接口
        $result = $this->platform->orderStatusNotify($params);

        return $result;
    }
    
    // 分账回调
    public function centsStatusNotify($params)
    {
        // 验证数据
        // 调用平台接口
        $result = $this->platform->centsStatusNotify($params);

        return $result;
    }

    // ec协议回调
    public function ecStatusNotify($params)
    {
        // 验证数据
        // 调用平台接口
        $result = $this->platform->ecStatusNotify($params);

        return $result;
    }




    // ---------------------------------分账相关-------------------------------------


    // 商户分账业务开通申请（第一步，商户开通分账）
    public function applyLedgerMer($params)
    {
        // 验证数据
        // 调用平台接口
        $result = $this->platform->applyLedgerMer($params);

        return $result;
    }
    
    // 创建分账接收方（第二步，返回分账接收方编号）
    public function applyLedgerReceiver($params)
    {
        // 验证数据
        // 调用平台接口
        $result = $this->platform->applyLedgerReceiver($params);

        return $result;
    }

    // 分账关系绑定申请（第三步，绑定）
    public function applyBind($params)
    {
        // 验证数据
        // 调用平台接口
        $result = $this->platform->applyBind($params);

        return $result;
    }
    
    // 账户余额查询（第四步，查余额（payType=03））
    public function balanceQuery($params)
    {
        // 验证数据
        // 调用平台接口
        $result = $this->platform->balanceQuery($params);

        return $result;
    }

    // 分账（第五步，分账）
    public function balanceSeparate($params)
    {
        // 验证数据
        // 调用平台接口
        $result = $this->platform->balanceSeparate($params);

        return $result;
    }
    
    // 账管家余额查询（第六步，查钱包余额）
    public function ewalletBalanceQuery($params)
    {
        // 验证数据
        // 调用平台接口
        $result = $this->platform->ewalletBalanceQuery($params);

        return $result;
    }

    // 账管家提现D1（第七步，提现）
    public function ewalletWithdrawD1($params)
    {
        // 验证数据
        // 调用平台接口
        $result = $this->platform->ewalletWithdrawD1($params);

        return $result;
    }
    
}